/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.itschapala.ds2.cafeteria.bl;

import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.itschapala.ds2.cafeteria.dao.CompraDaoLocal;
import mx.itschapala.ds2.cafeteria.dao.DetallecompraDaoLocal;
import mx.itschapala.ds2.cafeteria.enumeracion.EstadoCompra;
import mx.itschapala.ds2.cafeteria.modelo.Compra;
import mx.itschapala.ds2.cafeteria.modelo.Detallecompra;
import mx.itschapala.ds2.cafeteria.modelo.Listaplatillos;
import mx.itschapala.ds2.cafeteria.modelo.Usuario;

/**
 *
 * @author Santiago
 */
@Stateless
public class CompraBl implements CompraBlLocal {

    @EJB
    private UsuarioBlLocal usuarioBl;
    @EJB
    private DetallecompraDaoLocal detallecompraDao;
    @EJB
    private CompraDaoLocal compraDao;
    private Compra c;
    private Detallecompra dc;

    @Override
    public EstadoCompra buy(boolean tipo, Usuario user, Compra compra, List<Listaplatillos> platillos) {
        float suma = 0;
        for (Listaplatillos listaplatillos : platillos) {
            suma = suma + listaplatillos.getCosto();
            System.out.println("suma>>>>>>" + suma);
        }
        if (user.getSaldo() > suma) {
            if (tipo == true) {
                c = new Compra();
                c.setIdusuario(user);
                c.setFecha(new Date());
                c.setHora(new Date());
                c.setTipo(true);
                compraDao.create(c);
                for (Listaplatillos l : platillos) {
                    dc = new Detallecompra();
                    dc.setIdcompra(c);
                    dc.setIdlistaPlatillos(l);
                    dc.setTipo(true);
                    detallecompraDao.create(dc);
                    user.setSaldo(user.getSaldo() - suma);
                    usuarioBl.modify(user);
                    suma = 0;
                }
                return EstadoCompra.COMPLETE;
            } else if (tipo == false){
                c = new Compra();
                c.setIdusuario(user);
                c.setFecha(compra.getFecha());
                c.setHora(compra.getHora());
                c.setTipo(false);
                compraDao.create(c);
                for (Listaplatillos l : platillos) {
                    dc = new Detallecompra();
                    dc.setIdcompra(c);
                    dc.setIdlistaPlatillos(l);
                    dc.setTipo(false);
                    detallecompraDao.create(dc);
                    user.setSaldo(user.getSaldo() - suma);
                    usuarioBl.modify(user);
                    suma = 0;
                }
                return EstadoCompra.COMPLETE;
            }
        } else {
            return EstadoCompra.INCOMPLETE;
        }
        return null;
    }

    @Override
    public List<Compra> getAll() {
        return compraDao.findAll();
    }
    
    
    @Override
    public EstadoCompra modify(Compra buy) {
        if (buy.getId() == null || compraDao.find(buy.getId()) == null) {
            return EstadoCompra.INCOMPLETE;
        } else {
            compraDao.edit(buy);
            return EstadoCompra.COMPLETE;
        }
    }
    public EstadoCompra delete(Compra buy) {
        if (buy.getId() == null || compraDao.find(buy.getId()) == null) {
            return EstadoCompra.INCOMPLETE;
        } else {
            compraDao.remove(buy);
            return EstadoCompra.COMPLETE;
        }
    }

    @Override
    public Compra findById(Integer id) {
        return compraDao.find(id);
    }
}
